import { Controller } from 'egg';
import {Op} from 'sequelize'
export default class  NewsController extends Controller {
    //新闻列表接口
    /**
     * @api {get} /manage/news_list 新闻列表
     * @apiName newsList
     * @apiGroup News
     * @apiVersion 1.0.0
     * @apiDescription 新闻列表
     * @apiParam {String} keyword  关键字查询
     * @apiParam {Number} page  页面位置
     * @apiParam {Number} page_size  页面尺寸
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     * @apiSuccess {Object} data 查询结果数据结构
     * @apiSuccess {Object[]} data.data_info 新闻列表
     * @apiSuccess {String} data.data_info.news_title 新闻标题
     * @apiSuccess {String} data.data_info.type 新闻类型
     * @apiSuccess {String} data.data_info.news_cover 新闻封面路径
     * @apiSuccess {String} data.data_info.news_abstract 新闻摘要
     * @apiSuccess {Number} data.data_info.create_time 创建时间
     * @apiSuccess {Number} data.data_info.publish_time 发布时间
     * @apiSuccess {String} data.data_count 数据总数
     * @apiSuccess {String} data.page_count 页码总数
     *
     */
    /**
     * 分页查询所有数据
     * 参数：
     *  condition 检索条件
     * 输出：
     * {Number} code 返回状态码 0失败  200成功
     * {String} message 返回状态对应提示消息
     * {Object[]} data 分类列表
     * 过程：
     *  构建分页查询条件，
     *  分页查询数据，遍历结果集处理创建时间处理password等信息，返回结果
     */
    async list(){
        const {ctx}=this;
        const {query}=ctx.request;
        let condition={};
        try {
            if(query.keyword){
                let keyword=query.keyword;
                condition['news_title']={[Op.like]: '%'+ keyword +'%'};
            }
            let order_condition=[
                ['create_time', 'DESC']
            ];
            //ctx.helper.sort_order(order_condition);
            let attributes=["news_id",'news_title','type','news_cover','news_abstract','publish_time','create_time','news_content','sort']
            ctx.body=await ctx.service.common.find_and_count_all(condition,order_condition,query,'News',attributes);
        } catch (error) {
            ctx.body=ctx.helper.error_result("查询异常");
        }
    }

    //新闻新增
    /**
     * @api {post} /manage/news_add 新闻新增
     * @apiName newsAdd
     * @apiGroup News
     * @apiVersion 1.0.0
     * @apiDescription 新闻新增
     * @apiParam {String} news_title  新闻标题
     * @apiParam {Number} type  新闻类型 1 公司新闻 2 行业新闻
     * @apiParam {File} file 封面图file文件  
     * @apiParam {String} news_content  新闻正文
     * @apiParam {String} news_abstract  新闻了摘要
     * @apiParam {String} publish_time  发布时间
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     *
     */
    /**
     * 新闻新增
     * 构建新闻创建所需结构，创建新闻数据
     */
    async add(){
        const {ctx,app}=this;
        const {body}=ctx.request
        if(!body.news_title){
            return ctx.body=ctx.helper.error_result("必须指定新闻标题");
        }
        try {
            let news={
                news_title:body.news_title,
                type:body.type,
                news_content:body.news_content,
                news_abstract:body.news_abstract,
                publish_time:body.publish_time
            }
            if(ctx.request.files&&ctx.request.files[0]){
                const file = ctx.request.files[0];
                let accessUrl=await ctx.service.common.to_target_path(file,'news/');
                news['news_cover']=accessUrl;
            }
            let result=await app.model.News.create(news);
            if(result&&result['news_id']){
                return ctx.body=ctx.helper.success_result("操作成功",result);
            }  
        } catch(error){
            
        }finally{
          await ctx.cleanupRequestFiles();
        }
        ctx.body=ctx.helper.error_result("添加失败")
    }
    //新闻修改
    /**
     * @api {post} /manage/news_update 新闻修改
     * @apiName newsUpdate
     * @apiGroup News
     * @apiVersion 1.0.0
     * @apiDescription 新闻修改
     * @apiParam {String} news_id  新闻ID
     * @apiParam {Number} type  新闻类型 1 公司新闻 2 行业新闻
     * @apiParam {String} news_title  新闻标题
     * @apiParam {Number} news_content  新闻正文
     * @apiParam {String} news_abstract 新闻了摘要  
     * @apiParam {String} publish_time  发布时间
     * @apiParam {File} file 封面图file文件 
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     *
     */
    /**
     * 过程：
     * 修改新闻封面路径到数据库，删除旧的新闻封面文件
     */
    async update(){
        const {ctx,app}=this;
        const {body}=ctx.request;
        const {News}=app.model;
        if(!body.news_id){
            return ctx.body=ctx.helper.error_result("必须指定需要修改的新闻ID");
        }
        try {
            let news_id=body.news_id;
            let news_obj=await News.findByPk(news_id);
            let news_cover=news_obj ? news_obj['news_cover'] : '';
            let news:object={};
            if(parseInt(body.is_publish)){
                news={publish_time:ctx.helper.date_format(new Date(),'yyyy/MM/dd hh:mm')}
            }else{
                news=ctx.helper.assign_basic({},body);
            }
            if(ctx.request.files&&ctx.request.files[0]){
                const file = ctx.request.files[0];
                let accessUrl=await ctx.service.common.to_target_path(file,'news/');
                if(accessUrl){
                    news['news_cover']=accessUrl;
                }
            }
            let result=await app.model.News.update(news,{where:{news_id:news_id}});
            if(result){
                if(ctx.request.files&&ctx.request.files[0]){
                    ctx.service.common.un_link_file(news_cover);
                }
                return ctx.body=ctx.helper.success_result("操作成功");
            }  
        } catch(error){
            console.log(error);
        }finally{
          await ctx.cleanupRequestFiles();
        }
        ctx.body=ctx.helper.error_result("添加失败")
    }
    //新闻删除
    /**
     * @api {post} /manage/news_del 新闻删除
     * @apiName newsDel
     * @apiGroup News
     * @apiVersion 1.0.0
     * @apiDescription 新闻删除
     * @apiParam {String} job_id  职位ID
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     *
     */
    /**
     * 删除逻辑处理
     */
    async del(){
        const {ctx,app}=this;
        const {body}=ctx.request;
        const {News}=app.model;
        if(!body.news_id){
            return ctx.body=ctx.helper.error_result("必须指定需要修改的新闻ID");
        }
        try {
            let news_id=body.news_id;
            let news_obj=await News.findByPk(news_id);
            let news_cover=news_obj ? news_obj['news_cover'] : '';
            let result=await app.model.News.destroy({where:{news_id:news_id}});
            if(result){
                ctx.service.common.un_link_file(news_cover);
                return ctx.body=ctx.helper.success_result("删除成功");
            }  
        } catch(error){
            console.log(error);
        }finally{
          await ctx.cleanupRequestFiles();
        }
        ctx.body=ctx.helper.error_result("添加失败")
    }

    //新闻详情
    /**
     * @api {post} /manage/news_info 新闻删除
     * @apiName newsInfo
     * @apiGroup News
     * @apiVersion 1.0.0
     * @apiDescription 新闻删除
     * @apiParam {Number} job_id  职位ID
     * @apiSuccess {Number} code 返回状态码 0失败  200成功
     * @apiSuccess {String} message 返回状态对应提示消息
     * @apiSuccess {Object} data 查询结果数据结构
     * @apiSuccess {Number} data.news_id 新闻ID
     * @apiSuccess {String} data.news_title 新闻标题
     * @apiSuccess {String} data.type 新闻类型
     * @apiSuccess {String} data.news_cover 新闻封面路径
     * @apiSuccess {String} data.news_content 新闻正文内容
     * @apiSuccess {String} data.news_abstract 新闻摘要
     * @apiSuccess {Number} data.create_time 创建时间
     * @apiSuccess {Number} data.publish_time 发布时间
     */
    async info(){
        const {ctx}=this;
        const {query}=ctx.request;
        let condition={};
        try {
            if(!query.news_id){
                return ctx.body=ctx.helper.error_result("需要指定需要查询的新闻ID")
            }
            condition['news_id']=query.news_id;
            let result=await ctx.service.common.find_one(condition,"News","news_id");
            return ctx.body=ctx.helper.success_result("查询成功",result);
        } catch (error) {
        }
        ctx.body=ctx.helper.error_result("查询异常");
    }
}

